iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
DevOps

學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路系列 第 11

Day11 - 一次清楚搞懂 Istio Virtual Service 及 Destination Rule

  • 分享至 

  • xImage
  •  

前言

學過 Kubernetes 但對 Istio 不熟悉的人,應該會對 Virtual Service 以及 Destination Rule 等新名詞感到陌生,其實它們是 Kubernetes 的 CRD(Custom Resource Definition),作為 Istio 實現流量管理的關鍵,本篇就會來介紹 Virtual Service 以及 Destination Rule 到底是什麼,以及我們該如何去配置。

為何需要 Virtual Service 及 Destination Rule ?

可以先從一個簡單例子開始說起,前面有提到 Istio 的基本功能為流量管理,如何實現就是靠 Virtual Service 及 Destination Rule, Virtual Service 會定義流量要如何走Destination Rule 則定義目的地為何,藉由這兩個元件的相互配合,就能定義好流量要怎麼送、傳哪邊等規則。

https://ithelp.ithome.com.tw/upload/images/20220920/20139235KJG2DSAJOb.png

以此圖來說,Virtual Service 會定義 90% 流量要往 v1,10% 流量轉往 v2 ,而 Destination Rule 則定義 v1、v2 究竟包含哪些 Pod

接下來我們就透過實際的 yaml 檔案,來更清楚了解整個過程吧!

Destination Rule 介紹

Destionation Rule 是用來定義哪些集合裡存在哪些 Pod ,概念就如同 Service 的 Label Selector,設定好 Pod 的哪些 Label 對應到哪個集合,就能將 Pod 分群分類。我們以 前一章 使用到的 destination-rule.yaml 檔案當例子

  • destination-rule.yaml
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews
spec:
  host: reviews
  subsets:
  - name: v1 
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3

將 yaml 檔案拆解來看

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: reviews

metadata.name 定義 DestinationRule 名稱

spec:
  host: reviews

spec.host 定義要將 Reviews Service 的流量做分群

  subsets:
  - name: v1 
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
  - name: v3
    labels:
      version: v3

spec.subsets 定義群組名稱,以及選擇條件
如 v1 群組會將 Label 設為 version: v1 的 Pod 加入群組

DestinationRule 除了分群分類,還有包括 LoadBalancerConnectionPool 等額外設定,能對群組內的流量做更細部的控管。

Virtual Service 介紹

Virtual Service用來設置流量的路由規則,能做到的規則有很多種,我們以 前一章 使用到的 virtual_service.yaml 檔案當例子

  • virtual_service.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews
spec:
  hosts:
  - reviews
  http:
  - route:
    - destination:
        host: reviews
        subset: v2

將 yaml 檔案拆解來看

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: reviews

metadata.name 定義 VirtualService 名稱

spec:
  hosts:
  - reviews

spec.host 定義要對 Reviews Service 流量設置規則

  http:
  - route:
    - destination:
        host: reviews
        subset: v2

流量規則為將所有流量都轉到 reviews Service 底下的 v2
這裡的 v2 指的是 DestinationRule 設置的群組

Virtual Service 還能下達各式各樣的路由規則,下面就舉一些常用的例子。

  • Prefix Routing
  http:
  - match:
    - uri:
        prefix: "/hello"
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v1

若 Http prefix 為 /hello 時將流量送至 v2,反之則送至 v1

  • Weight Routing
http:
  - route:
  - destination:
      host: reviews
      subset: v2
    weight: 25
  - destination:
      host: reviews
      subset: v1
    weight: 75

25% 流量送至 v2,75% 流量送至 v1

  • Header Match Routing
http:
  - match:
    - headers:
        end-user:
          exact: jason
    route:
    - destination:
        host: reviews
        subset: v2
  - route:
    - destination:
        host: reviews
        subset: v3

在 Header 有設置 end-user: jason 時會將流量導入 v2,反之則會導入 v3

總結

本章了解完 Virtual Service 與 Destination Rule 後,之後的章節就會來實現 Istio 可以做到部署策略如 Canary 及 A/B Testing。


上一篇
Day10 - 踏出學習 Istio 的第一步,完成 Microservices 流量切換
下一篇
Day12 - 使用 Istio 實現金絲雀部署 (Canary Deployment)
系列文
學會 Kubernetes 然後呢?由 Istio 進入 DevOps 偉大航路30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言